package com.ruge.file;


import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;

import java.io.File;
import java.io.IOException;

/**
 * 爱丽丝、如歌  创建于 2018/10/16 9:30
 * 说明:  文件工具类
 */
public class FileUtil {

	/*-----------------------------增---------------------------------------------------------*/

	/**
	 * @param pathName 文件路径
	 * @return 新建文件
	 */
	public static File createFile(String pathName) {
		File file = new File(pathName);
		try {
			if (StringUtils.isNotBlank(pathName)) {
				if (!file.exists()) {
					file.mkdirs();
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return file;
	}

	/**
	 * @param filePath 文件夹名称
	 * @param fileName 文件名称
	 * @return 文件夹或文件的创建
	 */
	public static File createFile(String filePath, String fileName) {
		File file = new File(filePath);
		try {
			if (StringUtils.isNotBlank(filePath)) {
				if (!file.exists()) {
					file.mkdirs();
				}
			}
			file = new File(filePath + "/" + fileName);
			if (StringUtils.isNotBlank(fileName)) {
				if (!file.exists()) {
					file.createNewFile();
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return file;
	}
	/*-----------------------------删---------------------------------------------------------*/

	/**
	 * @param fileName 文件名称
	 * @return 删除是否成功
	 */
	public static boolean deleteByFile(String fileName) {
		File file = new File(fileName);
		if (!file.exists()) {
			throw new RuntimeException("文件不存在");
		}
		boolean delete = file.delete();
		return delete;
	}

	/**
	 * @param pathName 文件名称
	 * @return 删除路径下所有的文件
	 */
	public static boolean deleteByPath(String pathName) {
		File[] files = iteratorPath(pathName);
		boolean delete = false;
		for (File f : files
		) {
			delete = f.delete();
		}
		return delete;
	}
	/*-----------------------------改---------------------------------------------------------*/


	/**
	 * 文件复制
	 *
	 * @param olbFileName 老的文件名
	 * @param newFileName 新的文件名
	 * @return 文件复制是否成功
	 */
	public static boolean copyFile(String olbFileName, String newFileName) {
		boolean copyFile = false;
		try {
			FileUtils.copyFile(new File(olbFileName), new File(newFileName));
			copyFile = true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return copyFile;
	}
	/*-----------------------------查---------------------------------------------------------*/

	/**
	 * 判断文件路径是否存在
	 *
	 * @param pathName 文件路径
	 * @return 是否存在
	 */
	public static Boolean existByPath(String pathName) {
		Boolean result = false;
		try {
			if (!StringUtils.isNotBlank(pathName)) {
				return result;
			}
			File file = new File(pathName);
			if (file.exists()) {
				result = true;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}

	/**
	 * 判断文件是否存在  不存在就创建
	 *
	 * @param pathName 文件夹名称
	 * @param fileName 文件名称
	 * @return 返回文件是否存在 or 文件是否创建成功
	 */
	public static Boolean existByFileName(String pathName, String fileName) {
		Boolean result = false;
		try {
			File file = new File(pathName + "/" + fileName);
			if (file.exists()) {
				result = true;
			} else {
				result = false;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}

	/**
	 * @param fileName 文件的详情路径
	 * @return 文件路径名
	 */
	public static String getPathName(String fileName) {
		String result = "";
		if (StringUtils.isNotBlank(fileName)) {
			fileName = StringUtils.replace(fileName, "\\", "/");
			result = StringUtils.substring(fileName, 0, fileName.lastIndexOf("/"));
		}
		return result;
	}

	/**
	 * @param fileName 文件的详情路径
	 * @return 文件名
	 */
	public static String getFileName(String fileName) {
		String result = "";
		if (StringUtils.isNotBlank(fileName)) {
			fileName = StringUtils.replace(fileName, "\\", "/");
			result = StringUtils.substring(fileName, fileName.lastIndexOf("/") + 1, fileName.lastIndexOf("."));
		}
		return result;
	}

	/**
	 * @param fileName 文件的详情路径
	 * @return 带有拓展名的文件名
	 */
	public static String getFileNameWithExpendName(String fileName) {
		String result = "";
		if (StringUtils.isNotBlank(fileName)) {
			fileName = StringUtils.replace(fileName, "\\", "/");
			result = StringUtils.substring(fileName, fileName.lastIndexOf("/") + 1, fileName.length());
		}
		return result;
	}

	/**
	 * @param fileName 文件的详情路径
	 * @return 获取文件拓展名
	 */
	public static String getExpendName(String fileName) {
		String result;
		result = fileName;
		if (StringUtils.isNotBlank(fileName) && StringUtils.indexOf(fileName, ".") > -1) {
			result = StringUtils.substring(fileName, StringUtils.lastIndexOf(fileName, ".") + 1);
		}
		return result;
	}

	/**
	 * @param pathName 文件路径
	 * @return 遍历路径下所有的文件
	 */
	public static File[] iteratorPath(String pathName) {
		File file = new File(pathName);
		if (!file.exists()) {
			throw new RuntimeException("文件不存在");
		}
		File[] files = file.listFiles();
		return files;
	}

	public static Long getFileSize(String fileName, int type) {
		long l = FileUtils.sizeOf(new File(fileName));
		long resule = 0;
		switch (type) {
			case 1:
				resule = l;
				break;                           //字节
			case 2:
				resule = l / 1024;
				break;                      //KB
			case 3:
				resule = l / 1024 / 1024;
				break;                //M
			case 4:
				resule = l / 1024 / 1024 / 1024;
				break;           //G
		}
		return resule;
	}
}
